package mybox.junit;



import java.io.IOException;
import mybox.engine.File4Qcad;
import mybox.engine.Platte;
import mybox.engine.QVector;
import mybox.engine.RandLinie;
import mybox.engine.RandLinieOO;
import mybox.engine.ReferenceIOutput;
import mybox.engine.SchachtelTrick;



import junit.framework.TestCase;

public class RandLinieProcs extends TestCase {
	
	public void test_indDivs() {	    		
	    test_intDiv(5,2);
	    test_intDiv(5.5,2);
	    test_intDiv(5.9,2);
	    test_intDiv(6,2);
	    test_intDiv(6.1,2);	    
	}
	
	
	public void test_intDiv(double dividend, double divisor) {		
		int intQuotient=(int)((dividend-0.000000001)/divisor);
		System.out.println(dividend+"/"+divisor+"="+intQuotient);
		assertEquals(RandLinie.intDiv(dividend, divisor)==intQuotient,true);
	}
	
	public void test_RandLinie2Platte() throws SecurityException, IOException {
		
		File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
		QVector aktPos = new QVector(0,0);
		
		double laenge=30;
		double breite=50;
		double materialDicke=4;
		double zinkungsFaktor=1;
		double laserBreite=0.03;
		//double laserBreite=0.7;
		
		new RandLinie (file4qcad, aktPos,  "F", 0, laenge,materialDicke, zinkungsFaktor, laserBreite);		
		new RandLinie (file4qcad, aktPos,  "F", java.lang.Math.PI/2, breite,materialDicke, zinkungsFaktor, laserBreite);
		new RandLinie (file4qcad, aktPos,  "F", java.lang.Math.PI, laenge,materialDicke, zinkungsFaktor, laserBreite);		
		new RandLinie (file4qcad, aktPos,  "F", 3*java.lang.Math.PI/2, breite,materialDicke, zinkungsFaktor, laserBreite);		
		
		aktPos.y-= 10;
		
		new RandLinie (file4qcad, aktPos,  "M", 0, laenge,materialDicke, zinkungsFaktor, laserBreite);		
		
		
		file4qcad.close();
		
	}
	
public void test_RandLinieNewRL() throws SecurityException, IOException {
	
	File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
	QVector aktPos = new QVector(0,0);
	
	double laenge=35;	
	double materialDicke=4;	
	double zinkungsFaktor=1;
	double laserBreite=0.03;
	double phi = 0;//java.lang.Math.PI/2;
	boolean isGlatt=false;
	boolean isRand=true;
	boolean isFemale=true;
	boolean hasRandVerkuerzt=false;
	
	/*
	RandLinieOO rand = new RandLinieOO(file4qcad,aktPos, phi, laenge, materialDicke,laserBreite,
			isGlatt,
			isRand,
			isFemale,
			hasRandVerkuerzt);
	
	rand.draw();
	*/
	
	isFemale=false;
	aktPos=new QVector(aktPos.x,aktPos.y-10);
	//phi = java.lang.Math.PI/2;
	RandLinieOO randNR = new RandLinieOO(file4qcad,aktPos, phi, laenge, materialDicke,zinkungsFaktor,laserBreite,
			isGlatt,
	        isRand,
	        isFemale,
	        hasRandVerkuerzt);
	
	randNR.draw();

	file4qcad.close();
	
}
	
public void test_RandlinieOO() throws SecurityException, IOException {
	
	File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
	QVector aktPos = new QVector(0,0);
	
	double laenge=35;	
	double materialDicke=4;	
	double zinkungsFaktor=1;
	double laserBreite=0.03;
	double phi = 0;//java.lang.Math.PI/2;
	
	RandLinieOO rand = new RandLinieOO(file4qcad,aktPos, phi, laenge, materialDicke,zinkungsFaktor,laserBreite,false,true,true,false);
	
	rand.draw();

	file4qcad.close();
	
}

public void test_RandlinieOO2() throws SecurityException, IOException {
	
	File4Qcad file4qcad = new File4Qcad("/home/hannes/Desktop/output.dxf");		
	QVector aktPos = new QVector(0,0);
	
	double laenge=35;	
	double materialDicke=4;	
	double zinkungsFaktor=1;
	double laserBreite=1;
	//double laserBreite=0.03;
	double phi = 0;//java.lang.Math.PI/2;
	
	boolean isGlatt=false;
	boolean isRand=false;
	boolean isFemale=true;
	boolean hasRandVerkuerzt=false;	
	RandLinieOO rand1 = new RandLinieOO(file4qcad,aktPos, phi, laenge, materialDicke,zinkungsFaktor,laserBreite,isGlatt,isRand,isFemale,hasRandVerkuerzt);
	
	rand1.draw();
	
	aktPos.y=-10;
    RandLinieOO rand3 = new RandLinieOO(file4qcad,aktPos, phi, laenge, materialDicke,zinkungsFaktor,laserBreite,isGlatt,!isRand,isFemale,hasRandVerkuerzt);
	
	rand3.draw();
	
	aktPos.y=-20;
	aktPos.x=+laenge;
	phi=java.lang.Math.PI;
	isGlatt=false;isRand=true;isFemale=false;hasRandVerkuerzt=false;
    RandLinieOO rand2 = new RandLinieOO(file4qcad,aktPos, phi, laenge, materialDicke,zinkungsFaktor,laserBreite,isGlatt,isRand,isFemale,hasRandVerkuerzt);
	
	rand2.draw();
	
	aktPos.y=+10;
	aktPos.x=-0.0000000001;
	Platte platte = new Platte(file4qcad, aktPos, Platte.FF, laenge,laenge,materialDicke,zinkungsFaktor,laserBreite);
	platte.draw();

	file4qcad.close();
	
}




	
	
public void test_Platte2Extension() throws SecurityException, IOException {
	
	File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
	QVector aktPos = new QVector(0,0);
	
	double laenge=35;
	double breite=35;	
	double materialDicke=4;
	double xLaenge=20;
	double laserBreite=0.03;
	
	new Platte(file4qcad, aktPos, Platte.FFX, laenge,breite, xLaenge, materialDicke,laserBreite);

	file4qcad.close();
	
}

public void test_PlatteAndJamaica() throws SecurityException, IOException {
	
	File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
	QVector aktPos = new QVector(0,0);
	
	double laenge=70;
	double breite=50;	
	double materialDicke=4;	
	double zinkungsFaktor=1;
	double laserBreite=0.03;
	
	Platte platte1 =new Platte(file4qcad, aktPos, Platte.MF, laenge,breite, materialDicke,zinkungsFaktor,laserBreite);
	platte1.drawJamaica(materialDicke, materialDicke);
	
	aktPos = new QVector(0,breite+10);
	Platte platte2 =new Platte(file4qcad, aktPos, Platte.FF, laenge,breite, materialDicke,zinkungsFaktor,laserBreite);
	platte2.drawJamaica(materialDicke, materialDicke);
    
	
	file4qcad.close();
	
}

public void test_Platte2SchachtelExtension() throws SecurityException, IOException {
	
	File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
	QVector aktPos = new QVector(0,0);
	
	double laenge=35;
	double breite=35;	
	double hoehe=35;
	double materialDicke=3.0;
	double zinkungsFaktor=1;
	double xLaenge=20;
	double laserBreite=0.037;
	
	new Platte(file4qcad, aktPos, Platte.FFX, laenge,breite, xLaenge, materialDicke,laserBreite);
		
	aktPos.y-=hoehe;
	new Platte(file4qcad, aktPos, Platte.MF, laenge,hoehe,materialDicke,zinkungsFaktor,laserBreite);
	
	aktPos.x+=laenge+xLaenge+5; aktPos.y+=hoehe;
	new Platte(file4qcad, aktPos, Platte.FFX, laenge,breite,xLaenge, materialDicke,zinkungsFaktor,laserBreite);
	aktPos.y-=hoehe;
	new Platte(file4qcad, aktPos, Platte.MF, laenge,hoehe,materialDicke,zinkungsFaktor,laserBreite);		
	
	
	aktPos.x+=laenge+xLaenge+materialDicke+3; aktPos.y+=hoehe+materialDicke;
	new Platte(file4qcad, aktPos, Platte.MMR, hoehe,breite,materialDicke,zinkungsFaktor,laserBreite);
	aktPos.y-=breite+materialDicke+3;
	new Platte(file4qcad, aktPos, Platte.MMR, hoehe,breite,materialDicke,zinkungsFaktor,laserBreite);
	

	file4qcad.close();
	
}



	
public void test_Platte2Schachtel() throws SecurityException, IOException {
		
		File4Qcad file4qcad = new File4Qcad(ReferenceIOutput.testoutputFile());		
		QVector aktPos = new QVector(0,0);
		
		double laenge=70;
		double breite=30;
		double hoehe=50;
		double materialDicke=4;
		double zinkungsFaktor=1;
		double laserBreite=0.03;
		
		new Platte(file4qcad, aktPos, Platte.FF, laenge,breite,materialDicke,zinkungsFaktor,laserBreite);
		aktPos.y-=hoehe;
		new Platte(file4qcad, aktPos, Platte.MF, laenge,hoehe,materialDicke,zinkungsFaktor,laserBreite);
		
		aktPos.x+=laenge+5; aktPos.y+=hoehe;
		new Platte(file4qcad, aktPos, Platte.FF, laenge,breite,materialDicke,zinkungsFaktor,laserBreite);
		aktPos.y-=hoehe;
		new Platte(file4qcad, aktPos, Platte.MF, laenge,hoehe,materialDicke,zinkungsFaktor,laserBreite);		
		
		
		aktPos.x+=laenge+materialDicke+3; aktPos.y+=hoehe+materialDicke;
		new Platte(file4qcad, aktPos, Platte.MMR, hoehe,breite,materialDicke,zinkungsFaktor,laserBreite);
		aktPos.y-=breite+materialDicke+3;
		new Platte(file4qcad, aktPos, Platte.MMR, hoehe,breite,materialDicke,zinkungsFaktor,laserBreite);
		
		file4qcad.close();
		
	}



public void test_SchachteltrickInnenBox() 
throws SecurityException, IOException {
	SchachtelTrick.innenBox();
}

public void test_SchachteltrickAussenBox() 
throws SecurityException, IOException {
	SchachtelTrick.aussenBox();
}

	
	

}
